<?php

namespace app\job;

use think\Controller;
use think\Exception;
use think\queue\Job;
use think\Db;
use video\Alivideo;

/**
 * 队列下载文件
 */
class DownloadVideo extends Controller
{
    /**
     * 执行队列
     * @param Job $job
     * @param $data
     */
    public function fire(Job $job, $data){
        $info = $this->isDone($data);
        if(!$info){
            //数据不存在或者已执行完成，删除队列
            $job->delete();
            echo '删除队列成功！数据ID：'.$data['id'].PHP_EOL;
        }else{
            //执行队列方法，下载文件
            echo '开始下载视频！数据ID：'.$data['id'].PHP_EOL;
            try {
                $video = new Alivideo();
                $res = $video->aliVideoDownload($data['id']);
                if(!$res){
                    echo '视频下载失败，60秒后重试'.PHP_EOL;
                    $job->release(60);
                }else{
                    echo '视频下载成功'.PHP_EOL;
                }
                $job->delete();
            }catch (Exception $exception){
                echo '数据异常：'.$exception->getMessage().PHP_EOL;
                $job->release(60);
            }
        }
    }

    /**
     * 验证当前数据是否执行完
     * @param $data
     */
    private function isDone($data){
        $info = Db::name('activity_video')->where(['id'=>$data['id']])->find();
        if(!$info){
            return false;
        }
        if($info['is_download_status'] == 1){
            return false;
        }
        return true;
    }
}